package thread;

/**
 * 静态方法上如果使用synchronized,那么该方法一定具有同步效果
 */
public class SyncDemo3 {
    public static void main(String[] args) {
        Boo b1 = new Boo();
        Boo b2 = new Boo();
        Thread t1 = new Thread(()->b1.doSome());
        Thread t2 = new Thread(()->b2.doSome());
        t1.start();
        t2.start();
    }
}

class Boo{
    /*
        静态方法上使用synchronized后，锁对象同样不可选，只能当前类的类对象
        类对象:Class的实例
        在JVM内部，每个被加载的类都有且只有一个类对象与之对应。
        类对象知识会在后面学习反射知识时介绍
     */
    //public synchronized static void doSome(){
    public static void doSome(){
        synchronized(Boo.class) {//静态方法内没有this, 所以如果要在静态方法内使用静态块, 引用类对象的方式是: 类名.class
            try {
                Thread t = Thread.currentThread();
                System.out.println(t.getName() + ":正在执行doSome方法");
                Thread.sleep(5000);
                System.out.println(t.getName() + ":doSome方法执行完毕");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
